home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / Call.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  5KB  |  250 lines

  1. /*
  2. **    Call.c
  3. **
  4. **    Call log file maintenance routines
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16.     /* Some local variables. */
  17.  
  18. STATIC BPTR                CallFile;
  19. STATIC struct timeval    CallTime;
  20. STATIC PhoneLogHandle *    LogHandle;
  21. STATIC BOOL                CallActive;
  22.  
  23.     /* InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Number,STRPTR Name):
  24.      *
  25.      *    Initialize a log entry for the PhoneLog support routines.
  26.      */
  27.  
  28. STATIC VOID
  29. InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Number,STRPTR Name)
  30. {
  31.     struct ClockData ClockData;
  32.     struct timeval Now;
  33.  
  34.     GetSysTime(&Now);
  35.     Amiga2Date(Now.tv_secs,&ClockData);
  36.  
  37.     memset(Item,0,sizeof(struct PhoneLogEntry));
  38.  
  39.     if(Number)
  40.     {
  41.         LimitedStrcpy(sizeof(Item->Number),Item->Number,Number);
  42.  
  43.         if(Number == Name)
  44.             Name = "???";
  45.     }
  46.  
  47.     if(Name)
  48.         LimitedStrcpy(sizeof(Item->Name),Item->Name,Name);
  49.  
  50.     strcpy(Item->Reason,"-");
  51.  
  52.     strcpy(Item->ProgramName,"term");
  53.  
  54.     Item->ProgramVersion    = TermVersion;
  55.     Item->ProgramRevision    = TermRevision;
  56.  
  57.     Item->StartDay        = ClockData.mday;
  58.     Item->StartMonth    = ClockData.month;
  59.     Item->StartYear        = ClockData.year;
  60.     Item->StartHour        = ClockData.hour;
  61.     Item->StartMin        = ClockData.min;
  62.     Item->StartSec        = ClockData.sec;
  63.  
  64.     Item->EndDay        = ClockData.mday;
  65.     Item->EndMonth        = ClockData.month;
  66.     Item->EndYear        = ClockData.year;
  67.     Item->EndHour        = ClockData.hour;
  68.     Item->EndMin        = ClockData.min;
  69.     Item->EndSec        = ClockData.sec;
  70. }
  71.  
  72.     /* CallDate():
  73.      *
  74.      *    Add the current date and time to the logfile.
  75.      */
  76.  
  77. STATIC VOID
  78. CallDate(LONG Seconds,BPTR FileHandle)
  79. {
  80.         /* Days of the week. */
  81.  
  82.     STATIC STRPTR CallDays[7] =
  83.     {
  84.         "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
  85.     };
  86.  
  87.         /* Months of the year. */
  88.  
  89.     STATIC STRPTR CallMonths[12] =
  90.     {
  91.         "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
  92.     };
  93.  
  94.     struct ClockData ClockData;
  95.  
  96.         /* Convert time and date. */
  97.  
  98.     Amiga2Date(Seconds,&ClockData);
  99.  
  100.         /* Add the date line. */
  101.  
  102.     FPrintf(FileHandle,"%s %s %02ld %02ld:%02ld:%02ld %ld\n",CallDays[ClockData.wday],CallMonths[ClockData.month - 1],ClockData.mday,ClockData.hour,ClockData.min,ClockData.sec,ClockData.year);
  103. }
  104.  
  105.     /* MakeCall(struct PhoneEntry *Entry):
  106.      *
  107.      *    Register a new phone call.
  108.      */
  109.  
  110. VOID
  111. MakeCall(STRPTR Name,STRPTR Number)
  112. {
  113.         /* End previous entry. */
  114.  
  115.     if(CallActive)
  116.         StopCall(FALSE);
  117.  
  118.         /* Get current system time. */
  119.  
  120.     GetSysTime(&CallTime);
  121.  
  122.         /* Call logging enabled? */
  123.  
  124.     if(Config->CaptureConfig->LogCall && Config->CaptureConfig->CallLogFileName[0])
  125.     {
  126.         if(Config->CaptureConfig->LogFileFormat == LOGFILEFORMAT_CallInfo)
  127.         {
  128.                 /* Open logfile for writing. */
  129.  
  130.             if(CallFile = OpenToAppend(Config->CaptureConfig->CallLogFileName,NULL))
  131.             {
  132.                     /* Add the title line. */
  133.  
  134.                 FPrintf(CallFile,"%s (%s)\n--------------------------------\nLogin:  ",Name,Number);
  135.  
  136.                     /* Make the line complete. */
  137.  
  138.                 CallDate(CallTime.tv_secs,CallFile);
  139.  
  140.                 CallActive = TRUE;
  141.             }
  142.         }
  143.         else
  144.         {
  145.                 /* Open the log file */
  146.  
  147.             if(LogHandle = OpenPhoneLog(Config->CaptureConfig->CallLogFileName))
  148.             {
  149.                 struct PhoneLogEntry Item;
  150.  
  151.                     /* Set up a log entry */
  152.  
  153.                 InitPhoneLogEntry(&Item,Name,Number);
  154.  
  155.                     /* And write it */
  156.  
  157.                 WritePhoneLogStartEntry(LogHandle,&Item);
  158.  
  159.                 CallActive = TRUE;
  160.             }
  161.         }
  162.     }
  163. }
  164.  
  165.     /* StopCall(BOOLEAN Finish):
  166.      *
  167.      *    End the current phone call.
  168.      */
  169.  
  170. VOID
  171. StopCall(BOOL Finish)
  172. {
  173.     UBYTE LocalBuffer[MAX_FILENAME_LENGTH];
  174.     BOOL GotName = FALSE;
  175.  
  176.         /* Is a call currently being made? */
  177.  
  178.     if(CallFile)
  179.     {
  180.         struct timeval StopTime;
  181.         LONG Seconds;
  182.  
  183.             /* Get current system time. */
  184.  
  185.         GetSysTime(&StopTime);
  186.         Seconds = StopTime.tv_secs;
  187.  
  188.             /* Subtract the starting time from it. */
  189.  
  190.         SubTime(&StopTime,&CallTime);
  191.  
  192.             /* Add the info line. */
  193.  
  194.         if(Finish)
  195.             FPrintf(CallFile,"*** term exited before logout: ");
  196.         else
  197.             FPrintf(CallFile,"Logout: ");
  198.  
  199.             /* Make the line complete. */
  200.  
  201.         CallDate(Seconds,CallFile);
  202.  
  203.             /* Get the file name. */
  204.  
  205.         GotName = NameFromFH(CallFile,LocalBuffer,sizeof(LocalBuffer));
  206.  
  207.             /* Add the online time. */
  208.  
  209.         FPrintf(CallFile,"Time online: %02ld:%02ld:%02ld\n\n",(StopTime.tv_secs % 86400) / 3600,(StopTime.tv_secs % 3600) / 60,StopTime.tv_secs % 60);
  210.  
  211.             /* Finis... */
  212.  
  213.         Close(CallFile);
  214.         CallFile = NULL;
  215.     }
  216.  
  217.         /* Now what about the PhoneLog file? */
  218.  
  219.     if(LogHandle)
  220.     {
  221.         struct PhoneLogEntry Item;
  222.  
  223.             /* Get the file name. */
  224.  
  225.         GotName = NameFromFH(LogHandle->file,LocalBuffer,sizeof(LocalBuffer));
  226.  
  227.         InitPhoneLogEntry(&Item,NULL,NULL);
  228.  
  229.         WritePhoneLogEndEntry(LogHandle,&Item);
  230.         ClosePhoneLog(LogHandle);
  231.  
  232.         LogHandle = NULL;
  233.     }
  234.  
  235.  
  236.         /* Clear the `executable' bit. */
  237.  
  238.     if(GotName)
  239.     {
  240.         AddProtection(LocalBuffer,FIBF_EXECUTE);
  241.  
  242.         if(Config->MiscConfig->CreateIcons)
  243.             AddIcon(LocalBuffer,FILETYPE_TEXT,TRUE);
  244.     }
  245.  
  246.         /* No call is active now */
  247.  
  248.     CallActive = FALSE;
  249. }
  250.